xctf攻防世界 CRYPTO高手进阶区 Decode |
您所在的位置:网站首页 › xctf crypto › xctf攻防世界 CRYPTO高手进阶区 Decode |
xctf攻防世界 CRYPTO高手进阶区 Decode_The_File
原创
l8947943s 2022-10-21 16:41:41 ©著作权 文章标签 crypto git javascript 问题分析 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者l8947943s的原创作品,请联系作者获取转载授权,否则将追究法律责任 0x01. 进入环境,下载附件题目给出了一个无后缀文件,使用txt打开,如图: 0x02. 问题分析可以看出,题目包含的内容就是base64字符,想办法接触base64编码内容即可。但是这么多编码信息,如何拿到flag? 解题过程参考大佬的博客,在此引用一张图片: 在这里,说明加密后的填充位0,解码过程中,即使当,解码过程也能正确进行。那么也就是可以使用传递一些信息。因此,将编码中的ai提取出来 0x03. 直接上代码from string import ascii_uppercase, ascii_lowercase, digitsfrom Crypto.Util.number import long_to_bytesdef solve(): with open('pic/1a351e90fb2b476a929d1e2666d7c511', 'r') as file: f = file.read() lc = f.split('\n')[:-1] # split最后一个字符为空,因此要去到倒数第二个 # base就是对应的64个字符 base = ascii_uppercase + ascii_lowercase + digits + '+/' re2 = [] for code in lc: if '==' in code: # 如果是编码一个字节 re2.append(bin(base.find(code[-3]))[2:].rjust(6, '0')[2:]) elif '=' in code: # 如果是编码两个字节 re2.append(bin(base.find(code[-2]))[2:].rjust(6, '0')[4:]) ret = ''.join(re2) return long_to_bytes(int(ret[:ret.rfind('1') + 1], 2), 2).decode() if __name__ == '__main__': print(solve()) 运行后,最终的答案为:ROIS{base_GA_caN_b3_d1ffeR3nT} 最后,base64编码的原理一定要知道,后续作为内容进行整理! 赞 收藏 评论 分享 举报 上一篇:xctf攻防世界 REVERSE 薪手练习区(一) 下一篇:xctf攻防世界 CRYPTO高手进阶区 enc |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |